package models

import (
	"dache-server/basic/config"
	"gorm.io/gorm"
	"time"
)

type Driver struct {
	Id            uint           `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	UserId        uint           `gorm:"column:user_id;type:bigint UNSIGNED;not null;default:0;" json:"user_id"`
	Drivername    string         `gorm:"column:drivername;type:varchar(255);not null;" json:"drivername"`
	DriverLicense string         `gorm:"column:driver_license;type:varchar(50);not null;" json:"driver_license"`
	DriverImg     string         `gorm:"column:driver_img;type:varchar(255);comment:驾驶证图片;not null;" json:"driver_img"`   // 驾驶证图片
	DrivingImg    string         `gorm:"column:driving_img;type:varchar(255);comment:行驶证图片;not null;" json:"driving_img"` // 行驶证图片
	Idcard        string         `gorm:"column:idcard;type:varchar(18);not null;" json:"idcard"`
	DriverStatus  uint           `gorm:"column:driver_status;type:int UNSIGNED;comment:司机审核状态：1：待审核 2：审核通过 3：审核未通过;not null;default:0;" json:"driver_status"` // 司机审核状态：1：待审核 2：审核通过 3：审核未通过
	WorkStatus    uint           `gorm:"column:work_status;type:int UNSIGNED;comment:工作状态：1：空闲中 2：接单中 ;not null;default:0;" json:"work_status"`               // 工作状态：1：空闲中 2：接单中
	CreatedAt     time.Time      `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt     time.Time      `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt     gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (d *Driver) TableName() string {
	return "driver"
}

// 注册司机
func (d *Driver) RegisterDriver() error {
	return config.DB.Create(d).Error
}

// 司机信息修改
func (d *Driver) UpdateDriver() error {
	return config.DB.Where("id = ?", d.Id).Updates(&d).Error
}

// 查询司机状态
func (d *Driver) GetDriverWorkStatus() (count []int, err error) {
	err = config.DB.Model(&d).Select("id").Where("driver_status = 2").Where("work_status = 1").Find(&count).Error
	return
}
